ci: unified workflow (lint + typecheck + build + rust)#100
Conversation
Switch the TPS Area interpolation from `linear` to `monotone` so the Transaction volume chart renders as a smooth curve instead of connected straight segments between data points.
Revert line interpolation to linear and enable Recharts' built-in animation so newly arriving data points ease into the chart instead of snapping in. This is the smoothing that was actually requested: the visible motion of new points appearing, not the line shape.
Switch the X axis to a continuous time scale with a [now - 5min, now] domain advanced each animation frame, so new points slide in smoothly from the right edge instead of popping into discrete category slots. Keeps isAnimationActive disabled to avoid Recharts re-animation loops on each TPS event. Clamp the domain's left edge to the oldest point so the chart fills immediately instead of showing an empty 5-minute lead-in. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces frontend/pnpm-lock.yaml with main's lockfile minus the duplicate keys introduced by PR #97 (so pnpm 10 can parse it). No package versions change vs main; pnpm install --frozen-lockfile passes. The previous commit on this branch ran a non-frozen pnpm install, which silently re-resolved every floating semver in package.json and produced ~2000 lines of incidental lockfile churn. This commit reverses that.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryThis PR consolidates three separate CI concerns — Biome linting, TypeScript typechecking, and Next.js building — along with a new Rust check job into a single
Confidence Score: 4/5Safe to merge; the two open questions (missing env vars for next build, duplicated install steps) were flagged in prior review rounds and are the author's call to resolve. The workflow structure is sound: the Rust job correctly installs native build deps before checkout, operates at the workspace root where Cargo.toml lives, and the biome/typecheck/build jobs mirror established patterns. The outstanding concerns — the build job potentially throwing on missing NEXT_PUBLIC_EVENTS_WS_URL and the duplicated pnpm/node install steps between typecheck and build — were raised in previous review threads. .github/workflows/ci.yml — specifically the build job's env var handling and the shared setup duplication between typecheck and build.
|
| Filename | Overview |
|---|---|
| .github/workflows/ci.yml | New unified CI file with four jobs (lint, typecheck, build, rust); duplicate install steps between typecheck and build are a maintenance concern (already flagged), and build may fail on missing env vars (already flagged); the rust job is correctly structured at the workspace root with build deps installed before checkout. |
| .github/workflows/lint.yml | Deleted; its Biome lint job is carried forward unchanged in ci.yml. |
| frontend/package.json | Adds the typecheck script (tsc --noEmit) required by the new CI job; no other changes. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
trigger["Trigger\n(pull_request / push main / workflow_dispatch)"]
trigger --> lint
trigger --> typecheck
trigger --> build
trigger --> rust
lint["lint\nubuntu-latest\nBiome 2.1.2 ci"]
subgraph frontend_jobs ["Frontend Jobs (pnpm 10, Node 22)"]
typecheck["typecheck\npnpm typecheck\n(tsc --noEmit)"]
build["build\npnpm build\n(next build)"]
end
subgraph rust_job ["Rust Job (rust:1.91-slim container)"]
r1["Install native deps"]
r2["actions/checkout@v4"]
r3["rustup add rustfmt + clippy"]
r4["Swatinem/rust-cache@v2"]
r5["cargo fmt --all --check"]
r6["cargo clippy --all-targets --all-features -D warnings"]
r7["cargo build --all-targets"]
r1 --> r2 --> r3 --> r4 --> r5 --> r6 --> r7
end
rust --> rust_job
Reviews (4): Last reviewed commit: "ci: run rust job in rust:1.91-slim conta..." | Re-trigger Greptile
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: frontend | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: pnpm/action-setup@v4 | ||
| with: | ||
| version: 10 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 22 | ||
| cache: pnpm | ||
| cache-dependency-path: frontend/pnpm-lock.yaml | ||
| - run: pnpm install --frozen-lockfile |
There was a problem hiding this comment.
next build runs without required env vars
frontend/config/env.ts exposes NEXT_PUBLIC_EVENTS_WS_URL via getEnvOrThrow, which throws if the variable is unset. While the getter is lazy and won't fire during the webpack compile pass itself, any page that calls publicEnv.EVENTS_WS_URL during server-side rendering or static generation will cause next build to throw and fail the job. Consider adding an env: block (using GitHub Actions secrets) or providing dummy values so the build job gives reliable signal rather than potentially failing for a config reason instead of a code reason.
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/ci.yml
Line: 43-57
Comment:
**`next build` runs without required env vars**
`frontend/config/env.ts` exposes `NEXT_PUBLIC_EVENTS_WS_URL` via `getEnvOrThrow`, which throws if the variable is unset. While the getter is lazy and won't fire during the webpack compile pass itself, any page that calls `publicEnv.EVENTS_WS_URL` during server-side rendering or static generation will cause `next build` to throw and fail the job. Consider adding an `env:` block (using GitHub Actions secrets) or providing dummy values so the build job gives reliable signal rather than potentially failing for a config reason instead of a code reason.
How can I resolve this? If you propose a fix, please make it concise.90e1aac to
75e5e79
Compare
e166c0e to
756dbfd
Compare
Replaces
.github/workflows/lint.ymlwith a unified.github/workflows/ci.ymlrunning four jobs:biome ci)tsc --noEmit(frontend)next build(frontend)cargo fmt --check,cargo clippy -D warnings,cargo build(backend workspace)Notes:
lint.ymlis removed; its Biome job is rolled intoci.yml.publish-backend.yml(Docker image publish) is unchanged — this adds build/lint CI for Rust, not publishing.rustjob runs in therust:1.91-slimcontainer (matching the backend Dockerfile) so bindgen's libclang is new enough for the upstream C23 headers from monad-bft. Cargo build is cached viaSwatinem/rust-cache.workflow_dispatch-able from the Actions tab (also run onpull_requestand pushes tomain).Also adds a
typecheckscript (tsc --noEmit) tofrontend/package.json.rust(clippy)cargo fmt --checkandcargo buildpass.cargo clippy -D warningscurrently fails on 8 pre-existing lint issues inbackend/(this code was never clippy-checked —publish-backend.ymlonly builds). We are keeping strict-D warningsand fixing those findings in a separate follow-up PR; therustcheck here is expected red until then. Findings:large_enum_variant,needless_return,match_like_matches_macro,should_implement_trait(from_str),ptr_arg,clone_on_copy,manual_is_multiple_of,needless_borrow.Follow-ups (separate PRs)
rustjob goes green.frontend/) into a single root pnpm workspace with root orchestration scripts — deferred because it needs coordinated Vercel deploy-settings changes.